import axios from 'axios'
// 配置请求的根路径
const BASE_URL = 'http://127.0.0.1:8888/api/private/v1/'

axios.interceptors.request.use(config => {
  config.headers.Authorization = window.sessionStorage.getItem('token');
  // 在最后必须 return config
  return config;
})

// 返回一个Promise(发送get请求)
// 解构赋值，传入一个对象 里面包含url和数据data
export function fetchGet({ url, data = {}, status = 200 }) {
  return new Promise((resolve, reject) => {
    axios.get(BASE_URL + url, data)
      .then(res => {
        if (res.data.meta.status == status) {
          resolve(res.data);
        } else {
          reject(res.data.meta.msg);
        }
      })
      .catch(error => {
        console.log(error)
      })
  })
}

// 返回一个Promise(发送post请求)
// 因为new Promise声明的是异步函数，而且是为了ajax请求嵌套严重，而更加规范的一种书写方式;
// 这里将Promise作为返回值给我们的公用函数
export function fetchPost({ url, data = {}, status = 200 }) {
  return new Promise((resolve, reject) => {
    axios.post(BASE_URL + url, data)
      .then(res => {
          //console.log(res);
          if (res.data.meta.status == status) {
            resolve(res.data);
          } else {
            console.log(res.data.meta.msg);
            reject();
          }
      })
      .catch(error => {
        console.log(error)
      })
  })
}

//put类型的请求
export function fetchPut(url, data = {}, status = 200) {
  return new Promise((resolve, reject) => {
    axios.put(BASE_URL + url, data)
      .then(res => {
          console.log(res);
          if (res.data.meta.status == status) {
            resolve(res.data);
          } else {
            console.log(res.data.meta.msg);
            reject();
          }
      })
      .catch(error => {
        console.log(error)
      })
  })
}

//delete类型的请求
export function fetchDelete(url, data = {}, status = 200) {
  return new Promise((resolve, reject) => {
    axios.delete(BASE_URL + url, data)
      .then(res => {
          console.log(res);
          if (res.data.meta.status == status) {
            resolve(res.data);
          } else {
            console.log(res.data.meta.msg);
            reject();
          }
      })
      .catch(error => {
        console.log(error)
      })
  })
}